// add.js
const app = getApp()

Page({
  /**
   * 页面数据
   */
  data: {
    name: '',          // 姓名
    amount: '',        // 金额
    is_return_gift: false, // 是否已回礼
    loading: false,    // 是否加载中
    openid: null,      // 用户openid
    submitted: false   // 表单是否已提交
  },

  /**
   * 页面加载时执行
   */
  onLoad() {
    this.getOpenidFromApp()
  },
  
  /**
   * 尝试获取openid
   */
  getOpenidFromApp() {
    // 从App获取openid
    if (app.globalData.openid) {
      console.log('获取到openid')
      this.setData({ openid: app.globalData.openid })
      return
    }
    
    // 定时检查openid
    const checkOpenid = setInterval(() => {
      if (app.globalData.openid) {
        console.log('定时获取到openid')
        this.setData({ openid: app.globalData.openid })
        clearInterval(checkOpenid)
      }
    }, 300)
    
    // 2秒后仍未获取到，直接调用云函数
    setTimeout(() => {
      if (!this.data.openid) {
        console.log('直接获取openid')
        this.getOpenidDirectly()
        clearInterval(checkOpenid)
      }
    }, 2000)
  },
  
  /**
   * 直接调用云函数获取openid
   */
  async getOpenidDirectly() {
    wx.showLoading({ title: '加载中...' })
    
    try {
      const { result } = await wx.cloud.callFunction({
        name: 'login'
      })
      
      wx.hideLoading()
      
      if (result && result.openid) {
        console.log('获取到openid')
        this.setData({ openid: result.openid })
        app.globalData.openid = result.openid
        
        // 检查用户是否存在
        this.checkAndCreateUser(result.openid)
      } else {
        wx.showToast({
          title: '获取用户信息失败',
          icon: 'none'
        })
      }
    } catch (err) {
      wx.hideLoading()
      console.error('获取openid失败', err)
      wx.showToast({
        title: '获取用户信息失败',
        icon: 'none'
      })
    }
  },
  
  /**
   * 检查并创建用户
   */
  async checkAndCreateUser(openid) {
    try {
      const db = wx.cloud.database()
      const userRes = await db.collection('users').where({
        openid: openid
      }).get()
      
      // 如果用户不存在，则创建
      if (userRes.data.length === 0) {
        console.log('用户不存在，添加到数据库')
        await db.collection('users').add({
          data: {
            openid: openid,
            create_time: db.serverDate()
          }
        })
      }
    } catch (err) {
      console.error('检查用户是否存在失败', err)
    }
  },

  /**
   * 姓名输入处理
   */
  onNameInput(e) {
    this.setData({
      name: e.detail.value
    })
  },

  /**
   * 金额输入处理
   */
  onAmountInput(e) {
    this.setData({
      amount: e.detail.value
    })
  },

  /**
   * 回礼状态切换
   */
  onSwitchChange(e) {
    this.setData({
      is_return_gift: e.detail.value
    })
  },

  /**
   * 保存礼单
   */
  async saveGift() {
    // 设置表单已提交状态，用于显示验证错误
    this.setData({ submitted: true })
    
    const { name, amount, is_return_gift, openid } = this.data
    
    // 验证姓名输入
    if (!name.trim()) {
      wx.showToast({
        title: '请输入姓名',
        icon: 'none'
      })
      return
    }
    
    // 处理未获取到openid的情况
    if (!openid) {
      wx.showToast({
        title: '正在获取用户信息...',
        icon: 'none'
      })
      
      await this.getOpenidDirectly()
      
      if (!this.data.openid) {
        return wx.showToast({
          title: '用户信息获取失败，请重试',
          icon: 'none'
        })
      }
    }
    
    this.setData({ loading: true })
    
    try {
      const db = wx.cloud.database()
      
      // 添加礼单记录
      await db.collection('gift_list').add({
        data: {
          name,
          amount,
          is_return_gift,
          openid: this.data.openid,
          create_time: db.serverDate()
        }
      })
      
      wx.showToast({
        title: '添加成功',
        icon: 'success'
      })
      
      // 延迟1.5秒返回，给用户查看提示的时间
      setTimeout(() => {
        wx.navigateBack()
      }, 1500)
      
    } catch (err) {
      console.error('添加礼单失败', err)
      wx.showToast({
        title: '添加失败，请重试',
        icon: 'none'
      })
    } finally {
      this.setData({ loading: false })
    }
  },
  
  /**
   * 返回上一页
   */
  onCancel() {
    wx.navigateBack()
  }
}) 